home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 8: LINUX Games / Linux Cubed Series 8 - LINUX Games.iso / games / x11 / strategy / xsok-1.000 / xsok-1 / xsok-1.01 / src / X-events.c < prev    next >
C/C++ Source or Header  |  1994-11-24  |  4KB  |  163 lines

  1. /*****************************************************************************/
  2. /*                                         */
  3. /*                                         */
  4. /*    Xsok version 1.00 -- module X-events.c                     */
  5. /*                                         */
  6. /*    Event handler functions for the X window system.             */
  7. /*    Written by Michael Bischoff (mbi@mo.math.nat.tu-bs.de)             */
  8. /*    November-1994                                 */
  9. /*    see COPYRIGHT.xsok for Copyright details                 */
  10. /*                                         */
  11. /*                                         */
  12. /*****************************************************************************/
  13. #include "X-sok.h"
  14. #include <X11/keysym.h>        /* X11 key code definitions */
  15.  
  16. void refresh_screen(void) {
  17.     XClearArea(dpy, table, 0, 0, 0, 0, True);
  18. }
  19.  
  20. /* event entry points are: key_press, button_press, button_release, redraw_table */
  21. int mouse_x = 0, mouse_y = 0;
  22.  
  23. void button_press(XButtonPressedEvent *xev) {
  24.     mouse_x = xev->x / DX;
  25.     mouse_y = xev->y / DY;
  26.     switch (xev->button) {
  27.     case Button1:            /* quick move */
  28.     key_pressed("Mouse1");
  29.     break;
  30.     case Button2:            /* quick move */
  31.     key_pressed("Mouse2");
  32.     break;
  33.     case Button3:            /* quick move */
  34.     key_pressed("Mouse3");
  35.     break;
  36.     case Button4:            /* quick move */
  37.     key_pressed("Mouse4");
  38.     break;
  39.     case Button5:            /* quick move */
  40.     key_pressed("Mouse5");
  41.     break;
  42.     }
  43. }
  44.  
  45.  
  46. void key_press(XKeyPressedEvent *xev) {
  47.     char str[32];
  48.     int num;
  49.  
  50. #define    get_name_field()    get_selection()
  51.  
  52.     num = XKeycodeToKeysym(dpy, xev->keycode, 0);
  53.  
  54.     if (num & 0xff00) {
  55.         switch (num) {
  56.         case XK_Up:
  57.         key_pressed("Up");
  58.         return;
  59.         case XK_Left:
  60.         key_pressed("Left");
  61.         return;
  62.         case XK_Down:
  63.         key_pressed("Down");
  64.         return;
  65.         case XK_Right:
  66.         key_pressed("Right");
  67.         return;
  68.         case XK_Return:
  69.         case XK_Linefeed:
  70.         key_pressed("\n");
  71.         return;
  72.         case XK_BackSpace:
  73.         case XK_Delete:
  74.         key_pressed("\b");
  75.         return;
  76.         case XK_Escape:
  77.         key_pressed("\033");
  78.         return;
  79.     }
  80.         return;
  81.     }
  82.  
  83.     num = XLookupString(xev, str, 31, NULL, NULL);
  84.     if (num == 0)
  85.     return;
  86.     str[num] = '\0';        /* NULL to terminate it */
  87.  
  88.     key_pressed(str);
  89. }
  90.  
  91. /*****************************************************************************/
  92. /*                                         */
  93. /*    Functions for resize events and resize requests                 */
  94. /*                                         */
  95. /*****************************************************************************/
  96.  
  97. /* 1) hard resizes (i.e. forcing the outer window to change size) */
  98. /*    I think these are not liked in the Xaw community */
  99.  
  100. void cmd_Resize(void) {
  101.     XSize_t w, h;
  102.     w = graphic.width;
  103.     h = graphic.height;
  104.     Force_Resize(w, h);
  105. }
  106.  
  107. /* event handler function. This function is called by the Widget in response
  108.    to a request from us. In Xaw, this is a resize of the logical area, i.e.
  109.    of the virtual size of the tableau. */
  110.  
  111. void resize_event(XSize_t w, XSize_t h) {
  112. #ifdef LABER
  113.     printf("resize event to (%d,%d) called\n", w, h);
  114. #endif
  115.     if (graphic.height == h && graphic.width == w)
  116.     return;        /* no change of size */
  117.  
  118.     /* in xlib, we must clear the new area by hand; there may be illegal data
  119.        left in the server. This applies to Xaw as well */
  120.     {   XExposeEvent xev;
  121.     xev.count = -1;
  122.         if (gamegraphic) {
  123.         if (graphic.height < h) {
  124.         /* window is greater now */
  125.         XClearArea(dpy, table, 0, graphic.height, graphic.width, h - graphic.height, True);
  126.         ++xev.count;
  127.         }
  128.         if (graphic.width < w) {
  129.         /* window is greater now */
  130.         XClearArea(dpy, table, graphic.width, 0, w - graphic.width, h, True);
  131.         ++xev.count;
  132.         }
  133.         if (xev.count >= 0) {
  134.         /* generate synthetic expose events for the new area */
  135.         /* this must be done before we possibly change the layout */
  136.         if (graphic.height < h) {
  137.             /* window is greater now */
  138.             xev.x = 0;
  139.             xev.y = graphic.height;
  140.             xev.width = graphic.width;
  141.             xev.height = h - graphic.height;
  142.             redraw_table(&xev);
  143.             --xev.count;
  144.         }
  145.         if (graphic.width < w) {
  146.             /* window is greater now */
  147.             xev.x = graphic.width;
  148.             xev.y = 0;
  149.             xev.width = w - graphic.width;
  150.             xev.height = h;
  151.             redraw_table(&xev);
  152.         }
  153.         }
  154.     }
  155.     }
  156.     graphic.height = h;
  157.     graphic.width = w;
  158.  
  159.     if (!gamegraphic)
  160.     return;
  161. }
  162.  
  163.